﻿// 132_pattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <stack>

using namespace std;

class Solution {
public:
    
    bool find132pattern(vector<int>& nums) {
     
        int result = false;
        for (int i = 1; i < nums.size()-1; i++)
        {
            int left=nums[0]; int right=nums[i+1];
            for (int l = 0; l < i; l++)
            {
                if (nums[l] < nums[i] && nums[l] < left)
                {
                    left = nums[l];
                }
            }
            for (int r = i+1; r < nums.size(); r++)
            {
                if (nums[r] < nums[i] && nums[r]>right) {
                    right = nums[r];
                }
            }
            if (left < right && left<nums[i] && right<nums[i])
            {
                cout << "left: " << left << " right: " << right;
                result = true;
                break;
            }
        }
        return result;
    }

    bool find132stack(vector<int>& nums)
    {
        int size = nums.size();
        stack<int>candidate_k;
        candidate_k.push(nums[size-1]);
        int max_k = INT_MIN;
        for (int i = size - 2; i >= 0; i--)
        {
            if (nums[i] < max_k)
            {
                return true;
            }

            while (!candidate_k.empty()&&nums[i]>candidate_k.top())
            {
                max_k = candidate_k.top();
                candidate_k.pop();
            }

            if (nums[i] > max_k)
            {
                candidate_k.push(nums[i]);
            }
        }
        return false;

    }
};

int main()
{
    vector<int> vec = { 3,1,4,2 };
    vector<int> vec1 = { 3,5,0,3,4 };
    Solution solu;
    bool res = solu.find132pattern(vec1);
    bool res1 = solu.find132stack(vec1);
    cout << res1;
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
